package com.wl.designpattern.observer;

/**
 * 观察者模式
 *
 * Subject (抽象主题)代码的解耦，把所有观察者对象的引用保存到一个集合里，每个主题都可以有任何数量的观察者。抽象主题提供一个接口，可以增加和删除观察者对象
 * ConcreteSubject（具体主题）
 * Observer（抽象观察者）  得到主题通知更新自己
 * ConcrereObserver（具体观察者） 当得到主题更改通知时更新自身的状态
 *
 * 优点
 * 解除观察者与主题之间的耦合。让耦合的双方都依赖于抽象，而不是依赖具体。从而使得各自的变化都不会影响另一边的变化。
 *
 * 缺点
 * 使用观察者模式时需要考虑一下开发效率和运行效率的问题
 *
 * android 应用
 * setOnClickListener adapter notifyDateSetChanged
 *
 * Created by wangliang on 2021/2/22.
 */
public class Test {
    public static void main(String[] args) {
        Observable postman=new Postman();

        Observer boy1=new Boy("路飞");
        Observer boy2=new Boy("乔巴");
        Observer girl1=new Girl("娜美");

        postman.add(boy1);
        postman.add(boy2);
        postman.add(girl1);

        postman.notify("快递来啦");
    }
}
